/**
 * 
 */
package io.gitee.falllee.dao.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import io.gitee.falllee.dao.enums.SyncDatePrecisionEnum;

/**
 * @author batty
 *
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Table {
    
    /**
     * 表名
     * 
     * @return
     */
    String value() default "";

    /**
     * 是否启用缓存,0:默认(使用全局配置);1:启用缓存;2:禁用缓存
     * 
     * @return
     */
    int cache() default 0;

    /**
     * 是否启用Kafka消息,如果启用，在数据发生增、删、改后会发送消息,0:默认(使用全局配置);1:启用消息;2:禁用消息
     * 
     * @return
     */
    int kafka() default 0;

    /**
     * 缓存时间（原子缓存），默认1天
     * 
     * @return
     */
    long expireTime() default 86400L;

    /**
     * 缓存时间（列表缓存），默认30min
     * 
     * @return
     */
    long expireTimeList() default 1800L;

    /**
     * 批量插入每次请求最大数目
     * 
     * @return
     */
    int insertListMaxSize() default 500;

    /**
     * 批量更新每次请求最大数目
     * 
     * @return
     */
    int updateBatchMaxSize() default 500;

    /**
     * 是否同步表（同步表的固定字段取实体传递的值）
     * 
     * @return
     */
    boolean syncTable() default false;

    /**
     * 同步时间字段（如果syncTable=true，则可以指定此字段为同步时间字段，取数据库当前时间）
     * 
     * @return
     */
    String syncDateField() default "";
    
    /**
     * 同步时间精度
     * 
     * @return
     */
    SyncDatePrecisionEnum syncDatePrecision() default SyncDatePrecisionEnum.SENCEND;
}
